{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn import tree\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "sns.set()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic = pd.read_csv('./titanic.csv')\n",
    "titanic.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "valid data ratio: 80.135%\n"
     ]
    }
   ],
   "source": [
    "valid_data = titanic.dropna(subset=['Age', 'Survived', 'Sex', 'Pclass'], how='any')\n",
    "print('valid data ratio: %.3f%%' %(100 * len(valid_data) / len(titanic), ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 1 1 0 0 0 1 1 1]\n",
      "[[1 3]\n",
      " [0 1]\n",
      " [0 3]\n",
      " [0 1]\n",
      " [1 3]\n",
      " [1 1]\n",
      " [1 3]\n",
      " [0 3]\n",
      " [0 2]\n",
      " [0 3]]\n"
     ]
    }
   ],
   "source": [
    "second_feature = 'Pclass'\n",
    "target = np.array(valid_data.Survived)\n",
    "features = np.array([\n",
    "    valid_data.Sex.replace({'male': 1, 'female': 0}),\n",
    "    valid_data[second_feature],\n",
    "]).transpose()\n",
    "print(target[:10])\n",
    "print(features[:10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "clf = tree.DecisionTreeClassifier(max_depth=None, min_samples_leaf=1, max_leaf_nodes=None)\n",
    "clf = clf.fit(features[:-10], target[:-10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "survived: 0\n",
      "killed : survived = [0.53 0.47]\n"
     ]
    }
   ],
   "source": [
    "test_data = [0, 23]\n",
    "print('survived:', clf.predict([test_data])[0])\n",
    "print('killed : survived =', clf.predict_proba([test_data])[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "clf.score(features[-10:], target[-10:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "ename": "ExecutableNotFound",
     "evalue": "failed to execute ['dot', '-Tpng', '-O', 'titanic-surviving-decision-tree'], make sure the Graphviz executables are on your systems' PATH",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32mc:\\tools\\python36\\lib\\site-packages\\graphviz\\backend.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(cmd, input, capture_output, check, quiet, **kwargs)\u001b[0m\n\u001b[0;32m    146\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 147\u001b[1;33m         \u001b[0mproc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msubprocess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstartupinfo\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mget_startupinfo\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    148\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\tools\\python36\\lib\\subprocess.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)\u001b[0m\n\u001b[0;32m    728\u001b[0m                                 \u001b[0merrread\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrwrite\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 729\u001b[1;33m                                 restore_signals, start_new_session)\n\u001b[0m\u001b[0;32m    730\u001b[0m         \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\tools\\python36\\lib\\subprocess.py\u001b[0m in \u001b[0;36m_execute_child\u001b[1;34m(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)\u001b[0m\n\u001b[0;32m   1016\u001b[0m                                          \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfspath\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcwd\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcwd\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1017\u001b[1;33m                                          startupinfo)\n\u001b[0m\u001b[0;32m   1018\u001b[0m             \u001b[1;32mfinally\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [WinError 2] The system cannot find the file specified",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m                        Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-9-096b9c7505e2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      8\u001b[0m     special_characters=True)\n\u001b[0;32m      9\u001b[0m \u001b[0mgraph\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgraphviz\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mSource\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdot_data\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m \u001b[0mgraph\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage_filename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'png'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcleanup\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mc:\\tools\\python36\\lib\\site-packages\\graphviz\\files.py\u001b[0m in \u001b[0;36mrender\u001b[1;34m(self, filename, directory, view, cleanup, format, renderer, formatter)\u001b[0m\n\u001b[0;32m    186\u001b[0m             \u001b[0mformat\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_format\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    187\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 188\u001b[1;33m         \u001b[0mrendered\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbackend\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilepath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformatter\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    189\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    190\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mcleanup\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\tools\\python36\\lib\\site-packages\\graphviz\\backend.py\u001b[0m in \u001b[0;36mrender\u001b[1;34m(engine, format, filepath, renderer, formatter, quiet)\u001b[0m\n\u001b[0;32m    181\u001b[0m     \"\"\"\n\u001b[0;32m    182\u001b[0m     \u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrendered\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcommand\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mengine\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilepath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformatter\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 183\u001b[1;33m     \u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcapture_output\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcheck\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mquiet\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mquiet\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    184\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mrendered\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    185\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\tools\\python36\\lib\\site-packages\\graphviz\\backend.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(cmd, input, capture_output, check, quiet, **kwargs)\u001b[0m\n\u001b[0;32m    148\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    149\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merrno\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0merrno\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mENOENT\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 150\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mExecutableNotFound\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    151\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# pragma: no cover\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    152\u001b[0m             \u001b[1;32mraise\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m: failed to execute ['dot', '-Tpng', '-O', 'titanic-surviving-decision-tree'], make sure the Graphviz executables are on your systems' PATH"
     ]
    }
   ],
   "source": [
    "import graphviz\n",
    "image_filename = 'titanic-surviving-decision-tree'\n",
    "dot_data = tree.export_graphviz(\n",
    "    clf, out_file=None, \n",
    "    feature_names=['Sex', second_feature],\n",
    "    class_names=['Killed', 'Survived'],\n",
    "    filled=True, rounded=True,  \n",
    "    special_characters=True)\n",
    "graph = graphviz.Source(dot_data) \n",
    "graph.render(image_filename, format='png', cleanup=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sex_range = [0, 1]\n",
    "second_feature_range = np.min(valid_data[second_feature]), np.max(valid_data[second_feature])\n",
    "xx, yy = np.meshgrid(sex_range, np.linspace(second_feature_range[0], second_feature_range[1], 100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABEsAAAJHCAYAAABoytg6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XuYl3Wd//HXfAM8gMqhCUcxTTexVVwtirySUhAbd3Nn8FC2EGmiiRqLlYBYtiJRQ0q1RqitybblIVPhIsxw0jbNDlptmx2Uaj2BEMcQRA1mfn90Nb/PJANDMl9QHo/r8rq+3/tzf+/7PfqP85z7vr81ra2trQEAAAAgSVLZ0QMAAAAA7EzEEgAAAICCWAIAAABQEEsAAAAACmIJAAAAQEEsAQAAACiIJQAAAAAFsQQAAACg0K1aJzr//PPz1FNPpVKpZM8998zHP/7xvOENb2i3z6ZNmzJt2rTcd999qampybnnnpvTTz99q2sAAABA9X3rW9/Ktddem9bW1jz//PM5/PDDc9VVV2234zc0NOSWW27J7rvvvl2Od/XVV+fZZ5/NpEmTtrhf1WJJU1NT9tprryRJc3NzpkyZkjvuuKPdPvPnz88TTzyRhQsXZs2aNWlsbMwxxxyTAQMGbHENAAAAqK4//OEPufzyy3PHHXekrq4ura2t+fWvf71Nx9i4cWO6des4TcybN++ljvk3qdptOH8JJUmybt261NTUvGifO++8M6effnoqlUr69u2bE044IXfddddW1wAAAIDqWrFiRbp165bevXsnSWpqavL3f//3eeqppzJkyJC2/cr3f3nd1NSUkSNH5pZbbsmQIUOyatWqtv2bmpryhS98IUkycODArF+/PvPmzcsFF1zQts/GjRtz7LHH5sknn0ySXHfddTnttNMycuTInHfeeVm+fHmS5Jlnnsn48eNTX1+f973vfXniiSc69bNV7cqSJLn00kvz/e9/P62trfmP//iPF60//fTT2W+//dre19XVZenSpVtdAwAAALaPtWvXZu3atS/avvfee2fvvfdue3/YYYflyCOPzHHHHZchQ4bkjW98YxoaGrZ6/DVr1mTQoEFtt8L86le/yje/+c2MGTMmGzduzPz583PzzTe3+8yJJ56Y6dOnZ9WqVenbt2++973v5eCDD84BBxyQefPm5cknn8zXv/71VCqV3Hjjjfn0pz+dq666KrNmzUrPnj1z1113ZdWqVTnllFNy0kknbXXGqj7g9ZOf/GS++93v5qKLLsqMGTOqeWoAAAB42WrdsK5q5+rRo0dOOeWUDB8+vN0///mf/9luv0qlki9+8Yv5r//6rwwZMiT//d//nX/+53/OH//4xy0ef7fddmsXLEaOHNn2mI6/RJC/fuTGHnvskRNOOCHf/OY3kyR33HFHTjnllCTJPffckwceeCAjR45MQ0NDbrzxxixevDhJ8qMf/SinnXZakqRv374ZMWJEp/4dVPXKkr9obGzMZZddltWrV6dPnz5t2+vq6rJkyZIceeSRSdpfTbKltc5avXp9WlpaN7v26YaL/5YfBQAAgCqYPO8zHa5VKjXp06dnFaepvpo9euW5r05P6zOrtr7zSznPXn2z++gpmTdvXjZt2tRurbyqpHTooYfm0EMPzahRo/KP//iPWbRoUVpb///v3s8//3y7/ffYY492j+YYPHhw1q9fn0ceeaRdBPlrI0eOzPTp03PyySfnxz/+cdtFGK2trRk3blxbFNkeqhJL1q9fn7Vr16auri7Jn6vPPvvs03Zf01/U19fn1ltvzYknnpg1a9akubk5X/va17a61lktLa0dxpKVTy3/G34yAAAAqqGj3+V2Ja3PrErr2pVVOddffn/fkmXLlmXJkiU5+uijkyRLly7NqlWrcvDBB+dPf/pTHn/88Rx44IFtV4NsSWNjY2644YY8+OCDHd6JMnjw4Kxbty4zZ87MCSeckD322CNJMmzYsHzlK1/JiBEjss8+++SFF17I73//+xx22GF561vfmttvvz1vetObsnr16jQ3N6e+vn6r81QllmzYsCH/+q//mg0bNqRSqWSfffbJNddck5qampxzzjkZP358Bg0alIaGhvz85z/PiSeemCS54IILcsABByTJFtcAAACA6tq4cWOuvvrqLF68OLvvvntaWloyYcKEHHnkkbn00ktz1llnpW/fvjnuuOO2eqzGxsYMHz48p5xySlsE6Wi/z3/+8+0unmhsbMyaNWsyevToJH++0uS9731vDjvssJx//vmZMmVK6uvrU1tbm8GDB3fqZ6tpLa+NeYVbuXJdhzVy0pvPqvI0AAAAdFbTgzd0uFap1KRfv15VnGbH2DD7o11+ZUnN3v2yx7gru/QcLwdV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smnTplx77bWZMGFCbrrppm06d79+vTpce3abjgQAAEA11dbutaNHYBdS1VjS1NSUxx9/PNdcc027K0ZKd999dz772c9mzpw5efWrX922va6uLknyqle9KmPGjMkXvvCFtLS0dHiczVm5cl1aWlo3u9ZzG34OAAAAqmv58mc6XKtUarb4x3HYVlW7DWfmzJl5+OGHM2vWrPTo0WOz+9x777351Kc+leuvvz4DBgxo275x48asWLGi7f2CBQty6KGHblMoAQAAAOiMqlxZsmjRolx77bU56KCDcsYZZyRJBgwYkFmzZqWhoSHXXXdd+vfvn0suuSTdu3fP+PHj2z47Z86c7Lbbbjn33HPzpz/9KUnymte8JjNnzqzG6AAAAMAupiqx5PWvf30eeeSRza7Nmzev7fUPf/jDDo9x++23b/e5AAAAAP6a+1gAAAAACmIJAAAAQEEsAQAAACiIJQAAAAAFsQQAAACgIJYAAAAAFMQSAAAAgIJYAgAAAFAQSwAAAAAKYgkAAABAQSwBAAAAKIglAAAAAAWxBAAAAKAglgAAAAAUxBIAAACAglgCAAAAUBBLAAAAAApiCQAAAEBBLAEAAAAoiCUAAAAABbEEAAAAoCCWAAAAABTEEgAAAICCWAIAAABQEEsAAAAACmIJAAAAQEEsAQAAACiIJQAAAAAFsQQAAACgIJYAAAAAFMQSAAAAgIJYAgAAAFAQSwAAAAAKYgkAAABAQSwBAAAAKIglAAAAAAWxBAAAAKAglgAAAAAUxBIAAACAglgCAAAAUBBLAAAAAApiCQAAAEBBLAEAAAAoiCUAAAAABbEEAAAAoCCWAAAAABTEEgAAAICCWAIAAABQ6NbZHX/729+md+/eefWrX53169fn+uuvT6VSydlnn5099tijK2cEAAAAqJpOX1ny4Q9/OGvXrk2SNDU15cEHH8z//M//5LLLLuuy4QAAAACqrdNXlixevDgHH3xwWltbc/fdd2fBggXZfffdM3z48K6cDwAAAKCqOh1Ldtttt6xbty6/+93vUldXl759+2bjxo15/vnnu3I+AAAAgKrqdCx517velfe///1Zv359Ro8enST51a9+lQEDBnTZcAAAAADV1ulYMmXKlNx///3p1q1b3vrWtyZJampqcskll3TZcAAAAADV1ulYkiTHHnts2+snn3wyffr0yaBBg7b7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AAAUxBIAAACAglgCAAAAUBBLAAAAAApiCQAAAEChKrGkqakpw4YNy8CBA/Poo49udp9Nmzbl8ssvzwknnJARI0bk1ltv7dQaAAAAUH3Dhg1r+x1/w4YNOfvss3PJJZfkkksuyUMPPZQkmTx5cr761a8mSa6++uo0NTVt83n+1s+9FN2qcZLhw4dnzJgxGTVqVIf7zJ8/P0888UQWLlyYNWvWpLGxMcccc0wGDBiwxTUAAABgx1m7dm3OPffcDBo0KFOmTElNTc2OHuklq0osGTx48Fb3ufPOO3P66aenUqmkb9++OeGEE3LXXXdl7NixW1zbFpVKx//Bavbut03HAoCdXb8Bu+/oEQBgu9nS73NbWnsl6btv1//e+pdzPP3009m0aVO7tb333jt77713u20rV67MxIkTM2zYsIwfPz5J8r73vS8f+MAHcvzxx2/xXNddd10WLlyYTZs2pX///rniiitSW1ubZ555JpdeemkeffTR1NbWZt99982rX/3q7fhTbl1VYklnPP3009lvv/3a3tfV1WXp0qVbXdsWffr07Hhx3JXbfDwA2Jl9ZtyOngAA2J4u+ca0qpznueeeS0NDQ/74xz+2237hhRfmQx/6ULttEyZMyL/8y7+0hZLOmjdvXp588sl8/etfT6VSyY033phPf/rTueqqqzJr1qz07Nkzd911V1atWpVTTjklJ5100kv+ubbFThNLAAAAgB3vhRdeyO233/6i7X99VUmSvOMd78idd96ZM844I/379+/0Oe655548/PDDGTlyZJI/P6u0V69eSZIf/ehH+djHPpYk6du3b0aMGPG3/BgvyU4TS+rq6rJkyZIceeSRSdpfTbKlNQAAAGD72dztNh0ZO3Zs7r333owZMyZf+cpXOh1MWltbM27cuJx22mkvZdQus9N8dXB9fX1uvfXWtLS0ZNWqVWlubs473/nOra4BAAAAO84HP/jBjBw5MmPGjMmyZcs69Zlhw4blxhtvbLvV54UXXshvfvObJMlb3/rWtitbVq9enebm5q4ZfAuqcmXJtGnTsnDhwqxYsSJnnXVWevfunQULFuScc87J+PHjM2jQoDQ0NOTnP/95TjzxxCTJBRdckAMOOCBJtrgGAAAA7FjnnXdeWltbM2bMmE7t39jYmDVr1mT06NFJ/nylyXvf+94cdthhOf/88zNlypTU19entra2U18as73VtLa2tlb9rAAAAAA7qZ3mNhwAAACAnYFYAgAAAFAQSwAAAAAKYgkAAABA4RURS5qbm3PSSSelsbExv//977v0XJMnT85Xv/rVLj0HAAAAHbv66qvT1NS0o8fgFawqXx3c1W6++eaMHz8+J5100o4eBQAAAHiZe9nHkunTp+cnP/lJ/u///i833nhjPvrRj+bKK6/M+vXrkyTjx4/Pcccdl6eeeiqnnnpq3v3ud+e+++7Lc889lyuvvDI333xzfv7zn2f33XfPF7/4xdTW1uaRRx7J5Zdfng0bNuT555/Pu9/97px55pkvOvcLL7yQz372s3nwwQfzwgsvZODAgfm3f/u39OzZs8r/FgAAAF4eBg4cmAkTJqS5uTlr1qzJtGnT8sADD+S+++7Lxo0b8/nPfz6HHHJIli9fng9/+MNZv359nn/++bzjHe/IxIkTN3vM6667LgsXLsymTZvSv3//XHHFFamtra3yT8Yrycv+NpwpU6bkiCOOyMc+9rHMmjUrn/jEJ3LVVVfl9ttvzzXXXJPLLrssa9euTZKsWbMmb3rTmzJ37tycdtppOfPMMzNq1KjMnz8/hx9+eNvtNfvvv3/mzJmTO/5fO/cPkmwXxnH8d5skRH9osFwaoqHCloKGFinnoAKXoJagwAhaoi1qCiloipIIaqlBLa0tIoeGaAiEcLCgQXIpGiodjJL7HeIVQ59BHl4h3+9nO+c+9znnGs/FdU44rGAwqEAgoIeHh6K1d3d31dDQoFAopNPTU7W0tGhnZ6ei8QMAAADAb9PY2KijoyMtLCxodnZWfX19ikQiGhkZ0fb2dn6M3+/X8fGxIpGI4vG4Li8vi+Y6OTnR4+OjAoGAwuGwXC6XfD5fpUNClfn1lSWFYrGYUqmUpqen832GYSiZTKq5uVl1dXUaHByUJDmdTjkcDnV3d+fbV1dXkqRsNquVlRXd3d3JMAw9Pz8rkUioo6Pjx3rRaFSZTEZnZ2eSvitNurq6KhApAAAAAPxe/z6h4HQ6JUlDQ0OSpJ6eHp2fn0uScrmc1tbWFIvFZJqmXl5elEgk5HK5fswVjUYVj8c1NjaW/6++vr5SoaBKVVWyxDRNdXZ26uDgoOhbKpVSbW1tvm2xWH60a2pqlMvlJEkbGxuy2+3y+XyyWq2amprSx8dHyfWWl5c1MDDwH0QDAAAAANXJZrNJKj6XWSwWfX19SZL29vb0/v6uYDAom82mpaWlP57LvF6vPB5PZTaP/4Vffw2nUG9vr5LJpK6vr/N9t7e3Mk2zrHnS6bQcDoesVqvu7+91c3NTcpzb7db+/r6y2awkKZPJlLyuAwAAAAAoTzqdlt1ul81m09PTky4uLkqOc7vdOjw81Nvbm6Tviv9EIlHJraIKVVVlSVNTk7a2trS+vq7V1VV9fn6qra1Nfr+/rHm8Xq8WFxcVCoXU3t6u/v7+kuNmZma0ubkpj8cjwzBkGIbm5uaKrusAAAAAAMozOTmp+fl5DQ8Pq7W19Y8V/aOjo3p9fdXExISk70qT8fFxnkjAXzHMcssuAAAAAAAAqlhVXcMBAAAAAAD4WyRLAAAAAAAACpAsAQAAAAAAKECyBAAAAAAAoADJEgAAAAAAgAIkSwAAAAAAAAqQLAEAAAAAAChAsgQAAAAAAKDAP0jzdVKVFDDNAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1440x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "Z = Z.reshape(xx.shape)\n",
    "plt.figure(figsize=(20, 10))\n",
    "plt.xlim([-0.01, 1.01])\n",
    "plt.xticks([0, 1], labels=['female', 'male'])\n",
    "plt.ylabel(second_feature)\n",
    "cs = plt.contourf(xx, yy, Z, levels=Z.max())\n",
    "cb = plt.colorbar(ticks=[0, 1])\n",
    "cb.set_ticklabels(['Killed', 'Survived'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
